home *** CD-ROM | disk | FTP | other *** search
/ AMIGA-CD 2 / Amiga-CD - Volume 2.iso / ungepackte_daten / 1994 / 6 / 01 / mini-compiler / demo / strip.m < prev    next >
Encoding:
Text File  |  1995-06-01  |  2.1 KB  |  130 lines

  1. { Test1.m
  2.   include Test
  3. }
  4.  
  5. Program Strip;
  6.  
  7.  
  8. Var i,Fsiz : Integer;
  9.     s      : String;
  10.     so,de  : File of Integer;
  11.  
  12. Procedure Unit;
  13. Var Wert,anz : Integer;
  14. Begin
  15.  Read(so,anz);
  16.  Write(de,anz);
  17.  While anz>0 Do
  18.   Begin
  19.    Anz:=Anz-1;
  20.    Read(so,Wert);
  21.    Write(de,Wert)
  22.   End
  23. End;
  24.  
  25. Procedure Symbol;
  26. Var Wert,anz,Last : Integer;
  27.     Ref           : Boolean;
  28. Begin
  29.  Read(So,Last);
  30.  While Last<>0 Do
  31.   Begin
  32.    Anz:=Last;
  33.    If Anz<0
  34.       then Ref:=True
  35.       else Ref:=False;
  36.    Write(De,Anz);
  37.    Anz:=Anz and $ffff;
  38.    While Anz>0 DO
  39.     Begin
  40.      Read(so,Wert);
  41.      Write(De,Wert);
  42.      Anz:=Anz-1
  43.     End;
  44.    If Ref
  45.       then Begin
  46.             Read(So,Anz);
  47.             Write(De,Anz);
  48.             While Anz>0 DO
  49.              Begin
  50.                Read(So,Wert);
  51.                Write(De,Wert);
  52.                ANz:=Anz-1
  53.              End
  54.            End
  55.       else Begin
  56.             Read(so,Wert);
  57.             Write(de,Wert)
  58.            End;
  59.    Read(so,Last)
  60.   End;
  61.  Write(De,Last)
  62. End;
  63.  
  64. Procedure Reloc;
  65. Var Wert,Anz : Integer;
  66. Begin
  67.  Read(so,Anz);
  68.  Writeln('Reloc=',Anz);
  69.  If Anz>0
  70.     then Begin
  71.           Write(De,$3ec);
  72.           While Anz>0 Do
  73.            Begin
  74.             Write(De,Anz);
  75.             Read(so,Wert); { Hunk-Nummer }
  76.             Write(de,Wert);
  77.             While Anz>0 DO
  78.              Begin
  79.               Read(So,Wert);
  80.               Write(De,Wert);
  81.               Anz:=Anz-1
  82.              End;
  83.             Read(so,Anz)
  84.            End;
  85.            Write(De,0)
  86.          End
  87. End;
  88.  
  89. Procedure Process( wert : Integer);
  90. Begin
  91.  Case wert Of
  92.   $3e7,
  93.   $3e8,
  94.   $3e9,
  95.   $3ea,
  96.   $3eb : Begin
  97.            Write(De,Wert);
  98.            Unit
  99.          End;
  100.   $3f2 : Write(De,$3f2);
  101.   $3ef,
  102.   $3f0 : Begin
  103.           Write(De,Wert);
  104.           Symbol
  105.          End;
  106.   $3ec : Reloc;
  107.  End
  108. End;
  109.  
  110. Begin
  111.  Writeln('Strip 0.2');
  112.  Writeln('Entfernt leere Hunk_Relocs, da ALINK sonst abstürzt');
  113.  s:=ParamStr;
  114.  If s=''
  115.     then Begin
  116.            s:='ScLib'
  117.          End
  118.     else s:=Copy(S,1,Length(s)-1);
  119.  Reset(so,s);
  120.  Fsiz:=FileSize(so);
  121.  Rewrite(de,'ScLibNeu');
  122.  While Not(EOF(So)) Do
  123.   Begin
  124.    Read(so,i);
  125.    Process(i)
  126.   End;
  127.  Close(De);
  128.  Close(so)
  129. End.
  130.